Repository navigation
[Payment due @mkhutornyi] Add ask Concierge screen - #100552
rushatgabhane wants to merge 188 commits into
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx bun ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
@mkhutornyi next PR that you can start reviewing |
|
thanks for the qa steps @mkhutornyi |
|
hey @puneetlath can you please trigger web and mobile build for this PR? we want to send this to QA before merging |
|
🚧 shawnborton has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
# Conflicts: # src/hooks/useConciergeSidePanelReportActions.ts # src/pages/inbox/ConciergeSessionContext.tsx
|
@rushatgabhane Its a pass in Web, waiting for the validation in iOS, noticed that when selecting "Hide chat history", an empty space remains below the composer. Grabando.179.mp4 |
heyy @m-natarajan, for web wide screen it is expected. the compose will be centered now
|
|
Passed in iOS as well, Step 3 - The drop down arrow in Concierge thread is partially overlapped with the "New chat" button Concierge.8-12.mp4Concierge.1-7.mp4 |
|
@puneetlath let's merge it? |
| import useOnyx from './useOnyx'; | ||
|
|
||
| /** Whether the report is the Concierge chat in the Inbox */ | ||
| function useIsAskConciergeChat(reportID: string | undefined): boolean { |
There was a problem hiding this comment.
Is it not possible to ask concierge questions from the side panel? And the purpose of this hook is to know both:
- whether this is the concierge DM (not a thread or different convo with Concierge)
- in the main pain in the inbox
Is that right? If so, I find this name a bit confusing. What about:
| function useIsAskConciergeChat(reportID: string | undefined): boolean { | |
| function useIsConciergeInboxDM(reportID: string | undefined): boolean { |
There was a problem hiding this comment.
the sidepanel check will be removed in next PR
so the name would make more sense then
but i don't mind renaming it until then
There was a problem hiding this comment.
I renamed useIsAskConciergeChat to useIsConciergeInboxDM and merged main. Both are pushed.
- Rename (77f8c3a): I renamed the file and the function, and the
isAskConciergeChatvariables inuseConciergeAskState.tsandComposerInput.tsxtoisConciergeInboxDM. - Merge (c2825c9): Two conflicts, both in imports:
ReportActionsList.tsx: I kept this PR's imports and addedCollapsedSystemMessagesfrommain.ReportActionsListTest.tsx: I keptConciergeChatHistoryContext, which this PR renamed fromConciergeSessionContext, and addedmain's newActionListContextandCollapsedSystemMessagesimports.
npm run typecheck, lint on the changed files, and 4 related Jest suites (54 tests) pass.
|
@MelvinBot fix conflicts and merge main |
|
|
Co-authored-by: Rushat Gabhane <[email protected]> # Conflicts: # src/pages/inbox/report/ReportActionsList.tsx # tests/ui/ReportActionsListTest.tsx
Co-authored-by: Rushat Gabhane <[email protected]>
puneetlath
left a comment
There was a problem hiding this comment.
@rushatgabhane conflicts again unfortunately.
|
@MelvinBot fix conflicts please |
Co-authored-by: Rushat Gabhane <[email protected]> # Conflicts: # src/pages/inbox/report/ReportActionCompose/ComposerInput.tsx
|
I fixed the merge conflicts. I merged the latest There was one conflict, in
|


Explanation of Change
Builds the Ask Concierge screen from the Figma design in the main Concierge DM: a centered welcome empty state, a chat history toggle that expands and collapses the earlier conversation, and a
Your personal AI assistantsubtitle plus aNew chatbutton in question threads. It also removes theconciergeRespondInThreadbeta, so Concierge answers every question from the main DM in its own thread, including a message with several attachments. This needs https://github.com/Expensify/Web-Expensify/pull/57207 deployed first.Fixed Issues
For #94503
PROPOSAL:
Tests
Conciergewith the subtitleYour personal AI assistant, and the composer placeholder isHow much did I spend last month?.Ask me anything!, and the supporting copy. On a wide screen, verify the welcome and the composer are centered together. On a small screen (mobile), verify the welcome is centered above a composer docked at the bottom.View chat history, verify the earlier conversation appears withAsk a new questionabove the composer, then pressHide chat historyand verify it collapses again.New chatbutton that returns you to the Concierge chat in its welcome state.What are these?and send. Verify one message shows both images, a thread opens off it, Concierge replies once in the thread.Track expenses for my businessin onboarding. Open the Concierge chat from the Inbox and verify it showsAsk me anything!withView chat history. PressView chat historyand verify the onboarding tasks appear.Offline tests
Same as tests. The welcome state and the history toggle both read data already in Onyx, so they render offline; only expanding history beyond the cached page needs a connection.
QA Steps
Preconditions: three test accounts:
Conciergewith the subtitleYour personal AI assistant.Ask me anything!,Concierge can answer questions, update expenses, and more.and aView chat historybutton.View chat history. Verify the earlier conversation appears,Hide chat historyshows, andAsk a new questionappears above the composer.Hide chat history. Verify the chat returns to the welcome screen.New chatbutton.New chat. Verify you land on the Concierge chat in its welcome state.What are these?and send.[] Buy milk.Hide chat history.View chat history.View chat history. Verify the onboarding message and tasks are there.Mark as unread.Hide chat history, not the welcome screen.Show historybutton.PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
Screen.Recording.2026-10-02.at.15.16.02.mov
Old stuff
Screen.Recording.2026-09-14.at.06.10.11.mov